#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdlib.h>

/* Definición de los semáforos que agrupará el identificador semid */
#define SEM_A 1
#define SEM_B 0

int main(void)
{
	int i=10;
	int semid;
	struct sembuf operacion;
	int llave=1;

/* Variable empleada en el bucle while */
/* Obtención del identificador que agrupa los semáforos */
	if((semid = semget(llave,2,IPC_CREAT|0600)) == -1){
		perror("semget");
		exit(EXIT_FAILURE);
	}

/* Operaciones sobre los semáforos */
	operacion.sem_flg = 0;

	while(i)
	{
		operacion.sem_num = SEM_B;
		operacion.sem_op = -1;
		semop(semid,&operacion,1);

		printf("Proceso B ------ %d\n",i--);

		operacion.sem_num = SEM_A;
		operacion.sem_op = 1;
		semop(semid,&operacion,1);
}

/* Borrado del semáforo */
	semctl(semid,0,IPC_RMID,0);
}
